package main

import "fmt"

//4.全局匿名函数
var globalFunc = func(n1, n2 int) int {
	if n2 == 0 {
		panic("n2 不能为0")
	}
	return n1 / n2
}

func main() {

	//1.匿名函数，初始化时在后面直接调用，返回调用结果
	res := func(n1, n2 int) int {
		return n1 + n2
	}(1, 2)

	fmt.Println("初始化匿名时就调用，res=:", res)

	//2.创建匿名函数，并作为变量
	multiFunc := func(n1, n2 int) int {
		return n1 * n2
	}
	res2 := multiFunc(2, 3)
	fmt.Println("匿名函数作为变量调用res2=:", res2)
	//3.匿名函数作为变量
	res3 := doMulti(multiFunc, 3, 4)
	fmt.Println("匿名函数作为变量:res3=", res3)

	res4 := globalFunc(1, 2)
	fmt.Println("全局匿名函数,res4=", res4)

}

// 接收一个函数
func doMulti(multiFunc func(n1, n2 int) int, x1, x2 int) int {
	return multiFunc(x1, x2)
}
